草庐IT

C++11 线程 : sleep for a remaining time

全部标签

c# - 具有上限的线程安全集合

我正在寻找具有以下属性的集合:threadsafe:将在asp.net中使用,多个客户端可以同时尝试添加、删除和访问成员ma​​xelements:我希望能够在构造时设置一个上限,最大元素数TryAdd:一种与BlockingCollection.TryAdd(T)相同的方法将是完美的,即如果已达到最大元素数,它将返回false类似字典:在大多数其他方面是ConcurrentDictionary将是完美的,即能够通过键识别元素,删除任何项目(不仅仅是第一个或最后一个,我认为这将是BlockingCollection的限制)在尝试自己动手之前,我的问题是:我是不是错过了一个可以对集合中的

c# - catch 没有捕获到多线程错误

以下是一个完整的控制台程序,它重现了我遇到的一个奇怪的错误。该程序读取一个包含远程文件url的文件,每行一个。它启动50个线程来下载它们。staticvoidMain(string[]args){try{stringfilePath=ConfigurationManager.AppSettings["filePath"],folder=ConfigurationManager.AppSettings["folder"];Directory.CreateDirectory(folder);Listurls=File.ReadAllLines(filePath).Take(10000).T

c# - 评估需要一个线程临时运行。使用 Watch 窗口执行评估

我是completelystuck.我正在测试MetaTraderAPI并在VS2010的即时窗口中尝试运行方法时出现下一个错误:Afirstchanceexceptionoftype'System.Threading.ThreadAbortException'occurredinmscorlib.dllAfirstchanceexceptionoftype'System.Threading.ThreadAbortException'occurredinSystem.Runtime.Remoting.dllEvaluationrequiresathreadtoruntemporaril

c# - 通过 C# 中的 COM RCW 对象检测跨线程编码

我正在处理大量COM互操作的大型多线程C#应用程序中工作。其他开发人员和我有足够的机会不小心调用Single-ThreadedApartment(STA)来自MTA线程的COM对象,以及来自它们不是在其上创建的STA线程的COM对象。性能低下,跨线程编码是主要嫌疑人。是否有测试跨公寓编码的好方法?更好的是,是否有一种防御性编程技术来测试给定的COM对象是否属于该线程的单元?我最接近的是在可疑代码周围放置一个断言语句:Debug.Assert(Thread.CurrentThread.GetApartmentState()==ApartmentState.STA);suspiciousC

c# - C# 多线程应用程序可以为每个线程使用单独的 WorkingDirectories 吗?

在C#(.NET)中,在同一应用程序中运行的两个线程是否可以具有不同的“工作文件夹”??据我所知,答案是“否”。我认为WORKINGDIR是由Win32中的PROCESS设置的。我在这里错了吗?根据以下测试代码(以及Win32SetCurrentDirectoryAPI调用),这是不可能的,但是有没有人想出办法让它成为可能?usingSystem;usingSystem.Threading;publicclassTestClass{publicManualResetEvent_ThreadDone=newManualResetEvent(false);publicstaticvoidM

c# - 在 .NET 中是否有用于长时间运行线程的线程调度程序?

我们的场景是网络扫描仪。它连接到一组主机并使用低优先级后台线程并行扫描它们一段时间。我希望能够安排大量工作,但只能同时扫描任意给定的10台或任意数量的主机。即使我创建自己的线程,许多回调和其他异步优点也会使用ThreadPool,我最终会耗尽资源。我应该看看MonoTorrent...如果我使用THEThreadPool,我能否将我的应用程序限制为某个数量,以便为应用程序的其余部分顺利运行留出足够的空间?是否有一个线程池可以初始化为n个长期存在的线程?[编辑]似乎没有人注意到我对一些回复做了一些评论,所以我将在此处添加一些内容。线程应该是可取消的优雅而有力。线程应具有低优先级,让GUI

c# - 如何确定谁拥有我的应用程序退出时仍在运行的工作线程?

升级到VS2010后不久,我的应用程序无法正常关闭。如果我关闭应用程序然后在IDE中点击暂停,我会看到:问题是,没有上下文。调用堆栈只显示[外部代码],这不是很有帮助。这是我到目前为止为缩小问题范围所做的工作:删除了所有无关的插件以最小化启动的工作线程数在我创建工作线程(和委托(delegate)+BeginInvoke,因为我认为它们在调试器中无论如何都被标记为“工作线程”)的任何位置的代码中设置断点。没有人被击中。为所有线程设置IsBackground=true虽然我可以执行下一个蛮力步骤,即将我的代码回滚到这没有发生的点,然后查看所有更改日志,但这不是非常有效。鉴于调试器提供的信

c# - 尝试使用 ODP.NET 在 Oracle 11g 中读取或写入 protected 内存

我正在开发一个应该长时间运行并通过ODP.NET广泛使用Oracle(11g)数据库的应用程序。不过,偶尔(每2或3天)ODP.NET会抛出System.AccessViolationException,然后需要重新启动应用程序。这是我的堆栈跟踪:Unhandledexception:System.Reflection.TargetInvocationException:Exceptionhasbeenthrownbythetargetofaninvocation.--->System.AccessViolationException:Attemptedtoreadorwritepro

c# - 使用 Parallel.ForEach() 的 yield return 的线程安全

考虑以下代码示例,它创建一个可枚举的整数集合并并行处理它:usingSystem.Collections.Generic;usingSystem.Threading.Tasks;publicclassProgram{publicstaticvoidMain(){Parallel.ForEach(CreateItems(100),item=>ProcessItem(item));}privatestaticIEnumerableCreateItems(intcount){for(inti=0;i是否保证Parallel.ForEach()生成的工作线程每个都获得不同的项目,或者是否需要一

c# - C# 中多线程网络服务器的模式

在设计多线程服务器时,是否有我可以遵循的模板/模式/指南?通过我的谷歌搜索,我在网上找不到任何非常有用的东西。我的程序将启动一个线程以使用TcpListener监听连接。每个客户端连接都将由它自己的IClientHandler线程处理。服务器会将clientHandler.HandleClient包装在委托(delegate)中,调用BeginInvoke,然后不再关心它。我还需要能够干净地关闭监听线程,这是我在网上找不到的很多示例。我假设锁定/AutoResetEvents/线程魔法与异步BeginAceptTcpClient和EndAcceptTcpClient的一些组合会让我到达